package com.example.hctorisrael.deadolympics;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import org.andengine.audio.music.Music;
import org.andengine.audio.music.MusicFactory;
import org.andengine.engine.camera.Camera;
import org.andengine.entity.scene.background.SpriteBackground;
import org.andengine.entity.sprite.ButtonSprite;
import org.andengine.entity.sprite.Sprite;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.util.GLState;

import java.io.IOException;

/**
 * La escena que muestra información del juego
 *
 */
public class EscenaScores extends EscenaBase
{
    private Sprite spriteFondo; //(el fondo de la escena, estático)
    private ButtonSprite spriteBtnRegreso;
    private Music musicaFondo;
    private Marcador marcador;
    private EscenaJuegoDos valor;

    @Override
    public void crearEscena() {
        // Creamos el sprite de manera óptima
        spriteFondo = new Sprite(0,0, admRecursos.regionFondoScores,admRecursos.vbom) {
            @Override
            protected void preDraw(GLState pGLState, Camera pCamera) {
                super.preDraw(pGLState, pCamera);
                pGLState.enableDither();
            }
        };
        // Configuración de la imagen
        spriteFondo.setPosition(ControlJuego.ANCHO_CAMARA/2,ControlJuego.ALTO_CAMARA/2);

        // Crea el fondo de la pantalla
        SpriteBackground fondo = new SpriteBackground(1,0.5f,0,spriteFondo);
        setBackground(fondo);
        setBackgroundEnabled(true);
        crearSonidos();
        agregarMarcador();
        agregarBtnRegreso();
    }

    public void agregarMarcador() {
        marcador = new Marcador(admRecursos.engine, admRecursos.actividadJuego);
        admRecursos.camara.setHUD(marcador);
        marcador.quitarMarcador();
        marcador.quitarVidas();
        // Para marcador más alto. PRIMERO lee el marcador anterior
        SharedPreferences preferencias = admRecursos.actividadJuego.getSharedPreferences(
                "Estado", Context.MODE_PRIVATE);


        //puntaj mas alto
        int ultimoMarcador = preferencias.getInt("First",marcador.getMarcadorMasAlto());
        marcador.setMarcadorMasAlto(ultimoMarcador);

        //Segundo mas alto
        int penultimoMarcador = preferencias.getInt("Second",marcador.getMarcadorMasAlto());
        marcador.setMarcadorMasAltoDos(penultimoMarcador);


        marcador.moverMarcadorMasAlto(ControlJuego.ANCHO_CAMARA/2,ControlJuego.ALTO_CAMARA-150);
        marcador.moverMarcadorMasAltoDos(ControlJuego.ANCHO_CAMARA/2,ControlJuego.ALTO_CAMARA-180);

    }


    private void agregarBtnRegreso() {
        // Habilita los eventos de touch en ciertas áreas
        setTouchAreaBindingOnActionDownEnabled(true);

        float posicionX = ControlJuego.ANCHO_CAMARA - admRecursos.regionBtnRegresar.getWidth()/2;
        float posicionY = admRecursos.regionBtnRegresar.getHeight()/2;
        spriteBtnRegreso = new ButtonSprite(posicionX,posicionY,admRecursos.regionBtnRegresar,
                admRecursos.vbom) {
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {

                if (pSceneTouchEvent.isActionUp()) {
                    onBackKeyPressed();
                }
                return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
            }
        };

        // Registra el área del botón
        registerTouchArea(spriteBtnRegreso);
        // Agrega el botón de regreso después del fondo
        attachChild(spriteBtnRegreso);
    }

    private void crearSonidos(){
        try {
            musicaFondo = MusicFactory.createMusicFromAsset(admRecursos.engine.getMusicManager(),
                    admRecursos.actividadJuego, "Intro.mp3");
        }
        catch (IOException e) {
            Log.i("cargarSonidos", "No se puede cargar demo.ogg");
        }
        musicaFondo.setLooping(true);
        musicaFondo.play();
    }

    public Music getMusicaFondo() {

        return musicaFondo;
    }

    // El usuario oprime el botón de BACK; regresar al menú principal
    @Override
    public void onBackKeyPressed() {
        // Regresar al MENU principal
        musicaFondo.stop();
        admEscenas.crearEscenaMenu();
        admEscenas.setEscena(TipoEscena.ESCENA_MENU);
        admEscenas.liberarEscenaScores();
        admRecursos.camara.setHUD(null);
    }

    @Override
    public TipoEscena getTipoEscena() {
        return TipoEscena.ESCENA_SCORES;
    }

    @Override
    public void liberarEscena() {
        // Liberar cada recurso usado en esta escena
        spriteFondo.detachSelf();   // Se desconecta de la escena
        spriteFondo.dispose();      // Libera la memoria
        musicaFondo.release();
        spriteBtnRegreso.detachSelf();
        spriteBtnRegreso.dispose();
        this.detachSelf();      // La escena misma se deconecta del engine
        this.dispose();         // Libera la memoria
    }
}

